package org.example;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;    
    
/**  
 *   
 *   
 * ScheduledExecutorService是从Java SE5的java.util.concurrent里，做为并发工具类被引进的，这是最理想的定时任务实现方式。   
 * 相比于上两个方法，它有以下好处：  
 * 1>相比于Timer的单线程，它是通过线程池的方式来执行任务的   
 * 2>可以很灵活的去设定第一次执行任务delay时间  
 * 3>提供了良好的约定，以便设定执行的时间间隔  
 *   
 * 下面是实现代码，我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子，通过代码里参数的控制，首次执行加了delay时间。  
 *   
 *   
 * @author GT  
 *   
 */    
public class ses {    
	private static ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();  
	public static void main(String[] args) {   
        Runnable runnable = new Runnable() {    
            public void run() {    
            	try {
            		OutputTxt outputTxt = new OutputTxt();
            		outputTxt.Init();
					List<NewsBody> list = new getNews().sina();
					outputTxt.write(list, false, "新浪新闻");
					list = new getNews().thepaper();
					outputTxt.write(list, true, "澎湃新闻");
					list = new getNews().gmw(new getNews().gmwEdu);
					outputTxt.write(list, true, "光明网--教育科技文化");
					list = new getNews().gmw(new getNews().gmwFin);
					outputTxt.write(list, true, "光明网--经济");
					list = new getNews().gmw(new getNews().gmwLaw);
					outputTxt.write(list, true, "光明网--法治社会");
					
					String DATE_FORMAT = "hh:mm:ss";
					LocalDateTime localDateTime = LocalDateTime.now();
	                String result = localDateTime.format(DateTimeFormatter.ofPattern(DATE_FORMAT));
					System.out.println("抓取完毕，请到每日新闻文件夹查看("+result+")");
				} catch (Exception e) {
					e.printStackTrace();
				}
            }    
        };      
        // 第二个参数为首次执行的延时时间，第三个参数为定时执行的间隔时间    
        service.scheduleAtFixedRate(runnable, 0, 60*30, TimeUnit.SECONDS);   
        Scanner scanner = new Scanner(System.in);
        while(true) {
        	System.out.println("输入'现在抓取!!!'后可立即重新抓取(否则每30分钟获取一次)");
        	if(scanner.next().equals("现在抓取!!!")) {
        		try {
        			service.shutdown();
        		}catch (Exception e) {
				}
        		service = null;
        		try {
	        		service = Executors.newSingleThreadScheduledExecutor();
	        		service.scheduleAtFixedRate(runnable, 0, 60*30, TimeUnit.SECONDS); 
        		}catch (Exception e) {
				}
        		String DATE_FORMAT = "hh:mm:ss";
				LocalDateTime localDateTime = LocalDateTime.now();
                String result = localDateTime.format(DateTimeFormatter.ofPattern(DATE_FORMAT));
        		System.out.println("获取数据ing("+result+")");
        	}
        }
    } 
}    
